今天只會談到「空頭反轉型:底部反轉」,並做為Day5~Day24課題的整合。
原本是空頭走勢,下跌幅度愈大愈好。空頭反轉,依照道氏理論,當原本是空頭時,後來出現低點一波比一波高,高點也一波比一波高的循環,初步判斷由空翻多。其中緩跌型(緩跌緩漲)比急跌型(急跌急漲)好操作,原因在於緩跌緩漲較好找買賣點。時機則為長線走空,短中期剛剛走多的時候。
因為參賽主題是「技術分析」,因此接下來的程式實作部份只會包含「多空反轉股操作的工具」中的【主要工具】以及「如何判斷由空轉多」中的【技術面(技術分析)】。
接下來會用Day1「主觀性質客觀化」的方式一來展示空頭反轉型:底部反轉之交易系統。
首先第一個發生的是周KD黃金交叉,看盤軟體需要切換資料頻率至周線圖並匯出至Excel檔;然後用人工方式標註黃金交叉點。程式碼如下所示:
# 人工方式標示黃金交叉的點
# 黃金交叉點既買點
golden_points_len = len(np.array(df_stoch['D(9,3)']))
golden_points = np.array([np.nan]*golden_points_len)
idx = date_to_index(df_stoch,'2023-05-22')
golden_points[idx] = df_stoch.iloc[idx]['D(9,3)']
程式執行結果如下:
由於後續都會在日K線圖上操作,因此要將周K線圖上的標註移至日K線圖。程式碼如下所示:
# 人工方式標示週KD黃金交叉的點
golden_points_len = len(np.array(df_k_line['Close']))
golden_points = np.array([np.nan]*golden_points_len)
idx = date_to_index(df_k_line,'2023-05-26')
golden_points[idx] = df_k_line.iloc[idx]['Close']
接下來進行站上20日移動平均線,且20日移動平均線上揚的人工標註。程式碼如下所示:
# 人工方式標示站上20日線且20日線上揚之買點
ma20buy_points_len = len(np.array(df_k_line['Close']))
ma20buy_points = np.array([np.nan]*ma20buy_points_len)
idx = date_to_index(df_k_line,'2023-05-31')
ma20buy_points[idx] = df_k_line.iloc[idx]['Close']
最後標註型態,首先人工方式標示頸線:
# 人工方式標示W底頸線
neckline_price = df_k_line.loc['2023-03-08']['Close']
neckline_start_date = '2022-09-20'
neckline_end_date = '2023-07-21'
接著以人工方式標註突破點:
# 人工方式標示突破點
breaking_points_len = len(np.array(df_k_line['Close']))
breaking_points = np.array([np.nan]*breaking_points_len)
idx = date_to_index(df_k_line,'2023-07-17')
breaking_points[idx] = neckline_price
最後把這三個標註的點畫出來,程式碼如下所示:
# 設定K線格式
mc = mpf.make_marketcolors(up='xkcd:light red', down='xkcd:almost black', inherit=True)
s = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)
# 設定與頸線
seq_of_seq_of_points=[
[(neckline_start_date,neckline_price),(neckline_end_date,neckline_price)],
]
# 設定買點與移動平均線
added_plots={
"GOLDEN" : mpf.make_addplot(golden_points,type='scatter',marker='o',markersize=50,color='xkcd:baby blue'),
"MA20BUY" : mpf.make_addplot(ma20buy_points,type='scatter',marker='o',markersize=50,color='xkcd:aquamarine'),
"BREAK" : mpf.make_addplot(breaking_points,type='scatter',marker='o',markersize=50,color='xkcd:hot pink'),
"SMA5": mpf.make_addplot(df_sma['SMA5'],width=0.4,color='xkcd:maroon'),
"SMA20": mpf.make_addplot(df_sma['SMA20'],width=0.4,color='xkcd:violet'),
"SMA240": mpf.make_addplot(df_sma['SMA240'],width=0.4,color='xkcd:sky blue')
}
# 繪出K線圖
kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=list(added_plots.values()), alines=dict(alines=seq_of_seq_of_points, linewidths=1.5, colors='xkcd:orange yellow', alpha=0.6),datetime_format='%Y-%m-%d')
mpf.plot(df_k_line,**kwargs)
程式執行結果如下:
完整的程式碼請參照「第二十五天:建立一個交易系統.ipynb」。
至此Day3的所有課題都以說明完畢。接下來的參賽期間(Day26~Day29),則會將重點放在用深度學習技術進行型態識別的討論。並於最後一天(Day30)進行本次參賽的總結與補充先前未及提到部份。